package MyThread_demo.shendu_study_ReentrantLock;

import java.util.concurrent.locks.ReentrantLock;

/**
 * @author ChenYongHao
 * @date 2023/5/4 14:20
 * @desc https://caochenlei.blog.csdn.net/article/details/119992847
 */
public class ReentrantLock_Demo {
    /**
     * 线程并发工具
     * 7.5.1、ReentrantLock
     * 锁介绍
     *
     * ReentrantLock 相对于 synchronized，它具备如下特点：
     *
     * 可中断
     * 可以设置超时时间
     * 可以设置为公平锁
     * 支持多个条件变量
     * 与 synchronized 一样，都支持可重入
     */
    public static void main(String[] args) {
        // 创建锁
        ReentrantLock reentrantLock = new ReentrantLock();
        // 获取锁
        reentrantLock.lock();
        try {
            // 临界区
        } finally {
            // 释放锁
            reentrantLock.unlock();
        }

        //可重入
        //
        //可重入是指同一个线程，如果首次获得了这把锁，那么因为它是这把锁的拥有者，
        // 因此有权利再次获取这把锁，如果是不可重入锁，那么第二次获得锁时，自己也会被锁挡住

        //可打断
        //
        //ReentrantLock 支持可打断，如果是不可中断模式，即使使用了 interrupt 也不会让等待中断。
    }
}
